package top.kiterunner.learning.concurrency_test;

//volatile关键字：使一个变量在多个线程间可见。
//A/B线程都用到一个变量，Java默认是A线程中保留一份副本，这样如果B线程修改了该变量，则A线程未必知道。
//使用volatile关键字，会让所有线程都会读到变量的修改值。
//
//在下面的代码中，running是存在于堆内存中的ThreadDemo7对象中。使用volatile，将会强制所有线程都去堆内存中读取running的值。
//volatile并不能保证多个线程共同修改running变量时所带来的不一致问题，也就是说volatile不能替代synchronized。

import java.util.concurrent.TimeUnit;

/**
 * AdorynZhao in Tencent-UESTC.
 * Source Code Created on 2017/7/6.
 */
public class ThreadDemo7 {
    volatile boolean running = true;

    public void method() {
        System.out.println("Method Starting...");

        while (running) {

        }

        System.out.println("Method Ending...");
    }

    public static void main(String[] args) {
        ThreadDemo7 t7 = new ThreadDemo7();

        new Thread(t7::method, "Thread1").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        t7.running = false;
    }
}
